Objetos de una BD

Tablas

Es la unidad básica de almacenamiento de datos. Los datos están almacenados en filas y columnas. Son de existencia permanente y poseen un nombre identificatorio. Cada columna tiene entre otros datos un nombre, un tipo de datos y un ancho (este puede estar predeterminado por el tipo de dato)

Motor SQL Server

CREATE TABLE ordenes (

N_orden int NULL ,

N_cliente int NULL ,

F_orden datetime NULL ,

C_estado smallint NULL ,

F_alta_audit timestamp NULL ,

D_usuario varchar (20) NULL )

Tablas temporales

Es posible crear tablas temporales que duran mientras se ejecute la aplicación o lo que el usuario desee dentro de la misma sesion. No es posible alterar tablas temporarias. Si Dropearlas y crear los índices que necesite la aplicación. Las tablas temporales pueden ser creadas y usadas mientras dure la sesión. La tabla no grabará ningún log transaccional si así se configura. No se actualizan las tablas de catálogo.

En algunos motores de BD las Tablas temporales generadas pueden ser Globales para las cuáles los datos en una tabla temporal serán automáticamente borrados en el caso de la terminación de la sesión. Cada sesión sólo puede ver y modificar sus propios datos. Sobre ellos, no se generan bloqueos de DML.

Motor SqlServer

Se pueden crear tablas temporales locales y globales. Las tablas temporales locales son visibles sólo en la sesión actual; las tablas temporales globales son visibles para todas las sesiones.

Coloque un prefijo de signo numérico simple (#table_name) en los nombres de las tablas temporales locales y un prefijo de un signo numérico doble (##table_name) en los nombres de las tablas temporales globales.

Creación de tabla temporal en base a la tabla ordenes. La tabla Ordenes_pendientes se borrará automáticamente cuando finalice la sesión.

CREATE TABLE #ordenes_pendientes (

N_orden INTEGER,

N_cliente INTEGER,

F_orden DATE,

I_Total DECIMAL(15 , 2),

C_estado SMALLINT,

F_alta_audit TIMESTAMP,

D_usuario VARCHAR(20) )

WITH NO LOG;

INSERT INTO #ordenes_Pendientes

SELECT * FROM ordenes WHERE c_estado = 1

Creación y carga de una tabla temporal desde un SELECT.

SELECT *

INTO #ordenes_Pendientes

FROM ordenes

WHERE c_estado = 1

Tablas anidadas (Oracle)

Es posible crear una tabla con una columna cuyo tipo de dato sea otra tabla. De esta forma, las tablas pueden anidarse dentro de otras tablas como valores en una columna.

Tablas Organizadas por Índice (IOT - Index-Organized Tables) (Oracle)

Una IOT tiene una organización del almacenamiento que es una variante del Arbol-B. A diferencia de una tabla común, en la que los datos se guardan como un conjunto desordenado, en una IOT se guardan en una estructura de índice de Árbol-B, ordenado a la manera de una clave primaria. Sin embargo, además de almacenar los valores de las columnas de clave primaria de cada tabla, cada entrada en el índice almacena además los valores de las columnas no clave.

De esta forma, en vez de mantener dos estructuras separadas de almacenamiento, una para la tabla y una para el índice de Árbol-B, el sistema mantiene sólo un índice Árbol-B, porque además de almacenar el rowid de las filas, también se guardan las columnas no clave.

Clusters (Agrupamientos) (Oracle)

Un cluster es un grupo de tablas que comparten los mismos bloques de datos porque tienen columnas comunes compartidas y que a menudo se usan juntas. Cuando se agrupan tablas, el motor guarda físicamente todas las filas de cada una de ambas tablas en los mismos bloques de datos.

Esto brinda algunos beneficios:

Constraints (Restricciones)

Integridad de entidades:

Es usada para asegurar que los datos pertenecientes a una misma tabla tienen una única manera de identificarse, es decir que cada fila de cada tabla tenga una primary key capaz de identificar unívocamente una fila y esa no puede ser nula.

Interviene:

Integridad Referencial:

Es usada para asegurar la coherencia entre los datos. Ej.: Si se ingresa un comprobante de un cliente, este debe existir en la tabla de clientes.

Intervienen:

Los constraints referenciales permiten a los usuarios especificar claves primarias y foráneas para asegurar una relación PADRE-HIJO (MAESTRO-DETALLE).

Reglas que son aseguradas con el uso de constraints referenciales:

  1. Si un usuario BORRA (DELETE) una PRIMARY KEY y dicha clave está correspondida por FOREIGNS KEY en otras tablas, el DETELE fallará. Esta regla podría pasarse mediante la aplicación de cláusulas de ON DELETE CASCADE (Borrado en Cascada).
  2. Si un usuario MODIFICA (UPDATE) una PRIMARY KEY y la clave original está correspondida por FOREIGNS KEY en otras tablas, el UPDATE fallará
  3. No hay restricciones asociadas al borrado de FOREIGNS KEYS.
  4. Si un usuario MODIFICA (UPDATE) una FOREIGN KEY y no hay una PRIMARY KEY en la tabla de referencia que corresponda a esa nueva clave NO NULA, el UPDATE fallará.
  5. Todos los valores en una PRIMARY KEY deben ser únicos. Al tratar de insertar una clave duplicada en una PRIMARY KEY dará un error.
  6. Cuando un usuario INSERTA (INSERT) una fila en una tabla hijo, si todas las FOREIGN KEYS son NO NULAS, todas deberán estar correspondidas por una PRIMARY KEY, en caso contrario, el INSERT fallará.

TIPOS DE CONSTRAINTS REFERENCIALES

  1. CICLIC REFERENTIAL CONTSTRAINT: Asegura una relación de PADRE-HIJO entre tablas. Es el más común. Ej. CLIENTE -> FACTURAS PK Clientes.c_cliente FK Facturas.c_cliente que referencia a la PK de la tabla Clientes.
  2. SELF REFERENCING CONSTRAINT: Asegura una relación de PADRE-HIJO entre la misma tabla. Ej. EMPLEADOS -> EMPLEADOS

PK Empleados.c_empleado

FK Empleados.c_jefe que referencia a la PK de la tabla Empleados, este campo además admite NULOS. Esto significa que para todo empleado que el campo jefe sea distinto de NULL, dicho código debe existir como empleado.

  • MULTIPLE PATH CONSTRAINT: Se refiere a una PRIMARY KEY que tiene múltiples FOREIGN KEYS. Este caso también es muy común.
  • Ej. CLIENTES -> FACTURAS

    CLIENTES -> RECLAMOS

    PK Clientes.c_cliente

    FK Facturas.c_cliente que referencia a la PK de la tabla Clientes.

    FK Reclamos.c_cliente que referencia a la PK de la tabla Clientes.

    Integridad Semántica

    Es la que nos asegura que los datos que vamos a almacenar tengan una apropiada configuración.